<?php
namespace app\index\controller;
use app\index\model\User as UserModel;
use app\index\model\Profile;
use think\Controller;
use think\Cache;
use think\Session;
class User extends Controller
{
// 获取用户数据列表并输出
    public function index()
    {
        $db = new UserModel;

        //使用原生语句查询
//        $data = $user->query("select * from think_user");

        //使用原生的插入
//        $insert = $user->execute("insert into think_user(nickname,name,password,create_time,update_time) VALUES ('dasheng','sunwukong','666666',time(),time())");

        //使用原生的插入，使用占位符
//        $insert = $user->execute('insert into think_user(nickname,name,password,create_time,update_time) VALUES (?,?,?,?,?)',['kongkong','houzi',md5('kongkong'),time(),time()]);

        /**
         * 基本查询
         **/
        //查询单条数据，使用table()方法查询时必须使用表的全名
//        $data = $db->table('think_user')->where('id',14)->find();

        //查询数据集
//        $data = $db->table('think_user')->where('status',0)->select();

        //如果使用了表前缀的话，可以用name方法，省略表前缀
//        $data = $db->name('user')->where('id',15)->find();
//        $data = $db->name('user')->where('status',0)->select();

        //查询某个字段的值,注意，查询某个字段的值肯定是查询的单条数据的值
//        $data = $db->name('user')->where('id',15)->value('name');

        //查询某列的值，肯定是查询的数据集的某列的值
//        $data = $db->name('user')->where('status',0)->column('name');
//        $data = $db->name('user')->where('status',0)->column('name','id');


        /**
         * 添加数据
         * */

        //添加数据用数组的形式
//        $data = [
//            'name'=>'doudou',
//            'nickname'=>'niuniu',
//            'create_time'=>time(),
//            'update_time'=>time(),
//            'password'=>md5('doudou'),
//        ];

        //获取最后新增的id
//        $lastId = $db->name('user')->getLastInsID();

//        //添加多条数据用多维数组
//        $data = [
//            ['name'=>'chi', 'nickname'=>'niuniu', 'create_time'=>time(), 'update_time'=>time(), 'password'=>md5('doudou')],
//            ['name'=>'mei', 'nickname'=>'niuniu', 'create_time'=>time(), 'update_time'=>time(), 'password'=>md5('doudou')],
//            ['name'=>'wang', 'nickname'=>'niuniu', 'create_time'=>time(), 'update_time'=>time(), 'password'=>md5('doudou')],
//            ['name'=>'liang', 'nickname'=>'niuniu', 'create_time'=>time(), 'update_time'=>time(), 'password'=>md5('doudou')],
//        ];

        //添加多条数据，用insertAll
//        $data = $db->name('user')->insertAll($data);

        /**
         * 更新数据
         * */
//        $data = $db->name('user')
//                   ->where('name','doudou')
//                   ->update(['name'=>'冲哥']);    //update()方法中用数组

        /**
         * 删除数据
         * */
//        $data = $db->name('user')
//            ->where('id','>','40')
//            ->delete();

        //多条件查询用多个where方法就可以了
//        $data = $db->name('user')
//            ->where('password','123456')
//            ->where('status',0)
//            ->select();

        //有whereOr表示或查询
//        $data = $db->name('user')
//            ->where('name','doudou')
//            ->whereOr('password','123456')
//            ->select();

        //获取表信息
//        $data = $db->name('user')->getTableInfo();

        //使用between and,注意参数的写法
//        $data = $db->name('user')
//            ->where('id','between',[10,20])
//            ->select();


        /**
         * 链式操作，所有的数据库操作都可以用链式操作
         **/

//        $data = $db->name('user')
//            ->field('name,nickname')//注意字段是写在一个引号里的
//            ->where('id','between',[10,20])
//            ->order('id','desc')
//            ->select();




        /**
         * where()方法,用多个where虽然代码写的多，但是清晰明了
        **/
//        $map = array();
//        $map['id'] = 14;
//        $map['name'] = '林平之';
//        $data = $db->name('user')
//            ->where($map)
//            ->select();

        /**
         *联合查询
         **/

//        $data = $db->name('user')
//            ->alias('a')
//            ->join('profile b','a.id = b.user_id')
//            ->select();

        /**
         * field()  查询指定的字段
         * */
//        $data = $db->name('user')
//            ->field('name,nickname as xiaoming')
//            ->where('id','>','10')
//            ->select();

//        $data = $db->name('user')
//            ->field('name',true)
//            ->select();


        /**
         * distinct  返回不重复的所有值
         */
//        $data = $db->name('user')
//            ->field('password')
//            ->distinct(true)
//            ->select();



        /**
         * fetchSql 直接返回sql语句而不是执行sql
         */

//        $data = $db->name('user')
//            ->field('password')
//            ->distinct(true)
//            ->select();

        /**
         * 时间查询
         */

//        $data = $db->name('user')
//            ->where('create_time','< time',time())
//            ->select();

        //方法whereTime
//        $data = $db->name('user')
//            ->whereTime('create_time','today')
//            ->select();

        //保存多条数据
//        $list = ([
//            ['name'=>'余老1', 'nickname'=>'余老1', 'password'=>'888', 'create_time'=>time(), 'update_time'=>time()],
//            ['name'=>'余老3', 'nickname'=>'余老3', 'password'=>'888', 'create_time'=>time(), 'update_time'=>time()],
//            ['name'=>'余老4', 'nickname'=>'余老4', 'password'=>'888', 'create_time'=>time(), 'update_time'=>time()]
//        ]);
//
//        $data = $db->saveAll($list);


//        $data = ['name'=>'岳不群', 'nickname'=>'小贱贱'];
//
//        $data = $db->save($data,['id'=>'14']);

        /**
         * 模型
         */

        //增加一条数据

//        $db->name = 'caocao';
//        $db->nickname = 'aman';
//        $db->password = '123';
//        $db->create_time = time();
//        $db->update_time = time();
//        $data = $db->save();
//
//        //获取自增id
//        echo $db->id;

        //修改器，修改器的作用是获取数据的字段值后自动进行处理
//        $data = $db->get(3);

        //关联user 关联 profile
//        $user = UserModel::find(3);
//        $user->profile->email = 'thinkphp';
//        $data = $user->profile;

        //相对的关联，profile关联user
//        $profile = Profile::find(6);
//        $data = $profile->user;

        //一对多的关联查询
//        $user = UserModel::find(10);
        $data = UserModel::has('books','>=',3)->fetchSql()->select();
//        $data = UserModel::name('user')->alias('a')->join('book b','a.id = b.user_id')->select();
//        echo $data['status'];//用数组方式或对方访问都可以
//        echo $data->status;

        //预载入查询
//        $data = UserModel::with('profile')->select('4,5');


        //使用缓存
//        $data = Cache::set('name','11',3600);
//        $data =  Cache::inc('name',3);

        //session
//        Session::set('name','doudou');
//        $data = Session::get('name');

        //分页,tp5中的分页还是挺好用的
        $list = $db->name('user')->paginate(10);
        $this->assign('list',$list);
        return $this->fetch('user/uploads');//这里传参数时要注意，不是传的命名空间，是传当前模板下的文件名
//        return json($list);


//        $list = ([
//                ['name'=>'doudou','nickname'=>'dd','password'=>'22'],
//                ['name'=>'dsf','nickname'=>'dd','password'=>'22'],
//                ['name'=>'rtre','nickname'=>'dd','password'=>'22']
//        ]
//        );
//        $user->saveAll($list);
        //查找删除
//        $data = $user->get(10);
//        $data->delete();


        //直接删除
//        $user->destroy('32,33');


        //条件删除
//        $user->destroy(['password'=>'22']);
//        $user->where('id > 30')->delete();

        //查询，使用主键查询
//        $data = $user->get(30);

        //使用数组查询
//        $data  = $user->get(['name'=>'黑白子']);


        //用查询方法查询,用查询方法查询的时候，如果是多条件查询，就在where添加的数组中多加几个元素，而不是多加几个数组。
//        $data = $user->where(['name'=>'黑白子','nickname'=>'黑白'])->find();


        //动态查询
//        $data = $user->getByName('baidu');


        //聚合查询
//        $data = $user->where(['status'=>1])->count();
//        $data = $user->where(['status'=>1])->select();
//
//        return json($data);
    }


    //单文件上传
    public function upload(){
        // 获取表单上传文件 例如上传了001.jpg
        $file = request()->file('image');
        // 移动到框架应用根目录/public/uploads/ 目录下
        $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
        if($info){
            // 成功上传后 获取上传信息
            // 输出 jpg
            echo $info->getExtension();
            // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
            echo $info->getSaveName();
            // 输出 42a79759f284b767dfcb2a0197904287.jpg
            echo $info->getFilename();
        }else{
            // 上传失败获取错误信息
            echo $file->getError();
        }
    }

    //多文件上传，这里的文件上传不需要考虑图片的处理，图片的处理放在文件上传之前。
    public function uploads(){
        // 获取表单上传文件
        $files = request()->file('image');
        foreach($files as $file){
            // 移动到框架应用根目录/public/uploads/ 目录下
            $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
            if($info){
                // 成功上传后 获取上传信息
                // 输出 jpg
                echo $info->getExtension();
                // 输出 42a79759f284b767dfcb2a0197904287.jpg
                echo $info->getFilename();
            }else{
                // 上传失败获取错误信息
                echo $file->getError();
            }
        }
    }

}